package dao

import (
	"time"
)

// 这是 Gift 的全局公开dao对象，被service层调用!
var GiftDao = giftDao{}

// 物品表
// 这是 gift表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Gift struct {
	Id          int32     `json:"id" form:"id" db:"id" v:"id"`
	Name        string    `json:"name" form:"name" db:"name" v:"name"`                             // 物品名称
	Description string    `json:"description" form:"description" db:"description" v:"description"` // 详细描述
	Price       int32     `json:"price" form:"price" db:"price" v:"price"`                         // 价格(铜币数)
	Total       int32     `json:"total" form:"total" db:"total" v:"total"`                         // 总数量
	RemainNum   int32     `json:"remain_num" form:"remain_num" db:"remain_num" v:"remain_num"`     // 剩余数量
	ExpireTime  int32     `json:"expire_time" form:"expire_time" db:"expire_time" v:"expire_time"` // 有效期
	Supplier    string    `json:"supplier" form:"supplier" db:"supplier" v:"supplier"`             // 合作供应商
	BuyLimit    int32     `json:"buy_limit" form:"buy_limit" db:"buy_limit" v:"buy_limit"`         // 兑换数量限制
	Typ         int8      `json:"typ" form:"typ" db:"typ" v:"typ"`                                 // 类型：0-兑换码；1-折扣
	Status      int8      `json:"status" form:"status" db:"status" v:"status"`                     // 状态,0-未上线;1-已上线;2-已下线;3-过期
	CreatedAt   time.Time `json:"created_at" form:"created_at" db:"created_at" v:"created_at"`
}

// 注意:这是 Gift 的私有dao对象，只能在dao层内使用!
type giftDao struct {
	InsertTemplate func(arg Gift) (int64, error)      //插入一条记录
	UpdateTemplate func(arg Gift) (int64, error)      //更新一条记录
	DeleteTemplate func(id int64) (int64, error)      `arg:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Gift, error)       `arg:"id"` //根据传入的主键获取一条记录
	List           func(arg GiftList) ([]Gift, error) //模糊分页查询
}

/*
// 这是 gift 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type GiftPostman struct {
id
name
description
price
total
remain_num
expire_time
supplier
buy_limit
typ
status
created_at

}*/

// 这是 gift 表的批量请求参数
type GiftReq struct {
	List []Gift `json:"list" form:"list"`
}

// 这是 giftDao.List()方法的请求参数
type GiftList struct {
	Page
}
